package com.yantong.service;

import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 微信支付业务层
 * 主要是对微信官方api进行一些简单的封装 , 以实现我们的特殊逻辑
 * @author: juzi
 * @date: 2021/11/17
 * @time: 11:55
 */
public interface MyWxpayService {


    /**
     *
     * 调用统一下单接口，并组装生成支付所需参数对象.
     * @param request 统一下单请求参数
     * @param <T>     请使用{@link com.github.binarywang.wxpay.bean.order}包下的类
     * @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象
     * @throws WxPayException
     */
    public <T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException;

    /**
     * jsapi支付
     * @param openid
     * @param desc 商品描述
     * @param payNo 订单号
     * @param price 价格单位(元)
     * @param notifyUrl 回调地址
     * @param ip 用户IP地址
     * @param toJSONString 附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
     * @return
     * @throws WxPayException
     */
    WxPayMpOrderResult createJSPayRequest(String openid, String desc, String payNo, Double price, String notifyUrl, String ip, String toJSONString) throws WxPayException;


    /**
     * 微信退款
     * @param transactionId 微信订单号. 跟outTradeNo二选一
     * @param outTradeNo 商户订单号. 跟transactionId二选一
     * @param outRefundNo 商户退款单号
     * @param totalFee 订单金额.
     * @param refundFee 退款金额.
     * @return
     * @throws WxPayException
     */
    public WxPayRefundResult refund(String transactionId , String outTradeNo , String outRefundNo , Double totalFee , Double refundFee) throws WxPayException;
}
